package com.itany.corejava.code08_常用类.string;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 石小俊
 * @version 1.0
 * @date 2023年03月16日 9:32
 */
public class Test08_练习 {

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        test04();
    }

    /**
     * 在控制台输入一个字符串,统计字符串中包含多少个数字、英文字母、其他字符
     */
    public static void test01() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        // 在字符串中英文字母存在大小写
        // 为了便于统计,可以统一转换成大写或者小写
        s = s.toUpperCase();
        // 准备三个变量,用于接收三种数据的数量
        int count1 = 0; // 统计数字
        int count2 = 0; // 统计英文字母
        int count3 = 0; // 统计其他

        // 遍历字符串中所有的字符
        for (int i = 0; i < s.length(); i++) {
            // 取出当前迭代到的字符
            char c = s.charAt(i);
            // 判断取出的字符类型
            if (c >= '0' && c <= '9') {
                count1++;
            } else if (c >= 'A' && c <= 'Z') {
                count2++;
            } else {
                count3++;
            }
        }
        System.out.println("数字:" + count1 + ",英文字母:" + count2 + ",其他字符:" + count3);
    }

    /**
     * 控制台输入一个字符串,统计每个字母出现的次数(忽略大小写)并输出
     */
    public static void test02() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        // 忽略大小写,可以统一转换大写或者小写
        s = s.toLowerCase();
        // 将字符串转换成字符数组
        char[] arr = s.toCharArray();
        // 双重for循环操作
        // 外层循环遍历需要统计的字母
        for (char i = 'a'; i <= 'z'; i++) {
            // 每遍历一次,统计一个字母
            int count = 0; // 统计当前遍历的字母
            // 内层循环,遍历字符数组
            for (char c : arr) {
                if (c == i) {
                    count++;
                }
            }
            // 只打印出现过的字母
            if (count > 0) {
                System.out.println("字母" + i + "出现的次数为:" + count);
            }
        }
    }

    /**
     * 控制台输入一个字符串,对字符串中字符进行自然顺序的排序,将排序后的字符串展示出来
     */
    public static void test03() {
        System.out.print("请输入一个字符串:");
        String s = sc.next();
        char[] chars = s.toCharArray();
        // 通过Arrays工具类提供的sort方法进行排序
        Arrays.sort(chars);
        String result = new String(chars);
        System.out.println(result);
    }

    /**
     * 控制台输入两个个字符串,计算第二个字符串在第一个字符串中出现的次数
     */
    public static void test04() {
        System.out.print("请输入第一个字符串:");
        String s = sc.next();
        System.out.print("请输入第二个字符串:");
        String s2 = sc.next();
        if (s.length() >= s2.length()) {
            int count = 0;
            int index;
            // 循环查找是否存在s2,当不存在时退出
            while ((index = s.indexOf(s2)) != -1) {
                count++;
                // 在查找到s2的位置之前一定没有s2,可以截取掉
                // s2本身自己也有长度,而index返回的是s2的第一个字符所在的索引
                // 截取时需要算上s2本身的长度
                s = s.substring(index + s2.length());
            }
            System.out.println("第二个字符串在第一个字符串中出现了" + count + "次");
        } else {
            System.out.println("第二个字符串没有在第一个字符串中出现");
        }
    }
}
